package com.besttone.util;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.alibaba.fastjson.JSONObject;
import com.besttone.bean.PhoneRegionVo;
import com.besttone.bean.RegexType;
import com.jfinal.plugin.redis.Cache;
import com.jfinal.plugin.redis.Redis;

/**
 */
public class RedisUtils {
    private static Log _log = LogFactory.getLog(RedisUtils.class);

    /**
     * 获取电话信息
     * 
     * @return
     */
    public static PhoneRegionVo getPhoneRegionVo(String phone) {
	PhoneRegionVo vo = null;
	try {
	    // 判空
	    if (StringUtils.isEmpty(phone)) {
		return null;
	    }

	    // 判断格式
	    if (!phone.startsWith(ConstantUtil.STRING_1064)
		    && !RegexUtils.isTrue(RegexType.TELPHONENUMBER, phone)) {
		return null;
	    }

	    // 手机key
	    String key8 = ConstantUtil.STRING_NULL;
	    String key7 = ConstantUtil.STRING_NULL;

	    // 0开头
	    if (phone.startsWith(ConstantUtil.STRING_0)) {
		// 01 或者02开通 则是取前三位
		if (phone.startsWith(ConstantUtil.STRING_01)
			|| phone.startsWith(ConstantUtil.STRING_02)) {
		    key8 = ConstantUtil.STRING_SMS_PHONE_REGION_
			    + phone.substring(ConstantUtil.INT_0,
				    ConstantUtil.INT_3);
		} else {
		    // 取前四位
		    key8 = ConstantUtil.STRING_SMS_PHONE_REGION_
			    + phone.substring(ConstantUtil.INT_0,
				    ConstantUtil.INT_4);
		}
	    } else if (phone.startsWith(ConstantUtil.STRING_1064)) {
		// 获取前9位
		key8 = ConstantUtil.STRING_SMS_PHONE_REGION_
			+ phone.substring(ConstantUtil.INT_0,
				ConstantUtil.INT_9);
	    } else {
		// 手机号
		// 获取前8位没有值则获取前7位
		key8 = ConstantUtil.STRING_SMS_PHONE_REGION_
			+ phone.substring(ConstantUtil.INT_0,
				ConstantUtil.INT_8);
		key7 = ConstantUtil.STRING_SMS_PHONE_REGION_
			+ phone.substring(ConstantUtil.INT_0,
				ConstantUtil.INT_7);
	    }

	    Cache userCache = Redis.use();
	    // 解析json对象
	    vo = JSONObject.parseObject(
		    (userCache.get(key8) != null ? userCache.get(key8)
			    .toString() : null), PhoneRegionVo.class);
	    if (vo == null) {
		// 8位不存在 查询7位
		vo = JSONObject.parseObject(
			(userCache.get(key7) != null ? userCache.get(key7)
				.toString() : null), PhoneRegionVo.class);
	    }
	    return vo;
	} catch (Exception e) {
	    e.printStackTrace();
	    _log.error("redis数据解析异常:" + e, e.getCause());
	    // 短信通知
	    // SmsUtils.sendSms("18616596705", "18616596705", "redis取出数据异常!");
	    return null;
	} finally {
	    // _log.info("redis接口请求参数:" + phone + "---------返回参数:"
	    // + BaseRespMap.getJson(vo));
	}
    }

}
